<?php

if (!defined('BASEPATH')) exit('No direct script access allowed');

/**
 * 字符串辅助函数 扩展
 * 扩展方法 http://codeigniter.org.cn/user_guide/general/helpers.html
 */

/**
 * 删除收尾空格且把中间多个空格替换成一个
 *
 * 这里说的空格指的是所有的空格形式：\n \t \r等
 * 首先删除首尾空格，然后将中间的多个空格替换成一个
 * @param string $str: 要进行处理的字符串
 * @return string 处理完成后的字符串
 */
if (!function_exists('trim_blank'))
{
	function trim_blank($str)
	{
		$str = trim($str); //删除首尾空格
		return $str = preg_replace('/[\s\v]+/', ' ', $str); //将中间的多个空格替换成一个
	}
}


/*********************** Begin:以下内容来自 windframework 框架的 字符串类 ***********************/
/**
 * Code:https://github.com/phpwind/windframework
 * File:wind/utility/WindString.php
 * 以下方法原来是class(类)的表现，为了吻合Ci的构架，现在转换到CI的function(辅助方法)表现方式并轻微的做了修改
 */

/**
 * 求取字符串长度
 *
 * @param string $string  要计算的字符串编码
 * @param string $charset 原始编码,默认为utf-8
 * @return int
 */
function pw_strlen($string, $charset = 'utf-8')
{
	switch (strtolower($charset))
	{
		case 'gbk':
			$count = _strlen_for_gbk($string);
			break;
		case 'utf-8':
			$count = _strlen_for_utf8($string);
			break;
		default:
			$count = strlen($string);
	}
	return $count;
}

/**
 * 截取字符串,支持字符编码,默认为utf-8
 *
 * @param string $string 要截取的字符串编码
 * @param int $start  开始截取
 * @param int $length 截取的长度
 * @param string $charset 原妈编码,默认为utf-8
 * @param boolean $dot 是否显示省略号,默认为false
 * @return string 截取后的字串
 */
function pw_substr($string, $start, $length, $charset = 'utf-8', $dot = FALSE)
{
	switch (strtolower($charset))
	{
		case 'gbk':
			$string = _substr_for_gbk($string, $start, $length, $dot);
			break;
		case 'utf-8':
			$string = _substr_for_utf8($string, $start, $length, $dot);
			break;
		default:
			$string = substr($string, $start, $length);
	}
	return $string;
}

/**
 * 将变量的值转换为字符串
 *
 * @param mixed $input   变量
 * @param string $indent 缩进,默认为''
 * @return string
 */
function pw_var_to_string($input, $indent = '')
{
	switch (gettype($input))
	{
		case 'string':
			return "'" . str_replace(array("\\", "'"), array("\\\\", "\\'"), $input) . "'";
		case 'array':
			$output = "array(\r\n";
			foreach ($input as $key => $value)
			{
				$output .= $indent . "\t" . pw_var_to_string($key, $indent . "\t") . ' => ' . pw_var_to_string($value, $indent . "\t");
				$output .= ",\r\n";
			}
			$output .= $indent . ')';
			return $output;
		case 'boolean':
			return $input ? 'true' : 'false';
		case 'NULL':
			return 'NULL';
		case 'integer':
		case 'double':
		case 'float':
			return "'" . (string )$input . "'";
	}
	return 'NULL';
}

/**
 * 以utf8格式截取的字符串编码
 *
 * @param string $string  要截取的字符串
 * @param int $start      开始截取
 * @param int $length     截取的长度，默认为null，取字符串的全长
 * @param boolean $dot    是否显示省略号，默认为false
 * @return string
 */
function _substr_for_utf8($string, $start, $length = null, $dot = false)
{
	$l = strlen($string);
	$p = $s = 0;
	if (0 !== $start)
	{
		while ($start-- && $p < $l)
		{
			$c = $string[$p];
			if ($c < "\xC0") $p++;
			elseif ($c < "\xE0") $p += 2;
			elseif ($c < "\xF0") $p += 3;
			elseif ($c < "\xF8") $p += 4;
			elseif ($c < "\xFC") $p += 5;
			else  $p += 6;
		}
		$s = $p;
	}

	if (empty($length))
	{
		$t = substr($string, $s);
	}
	else
	{
		$i = $length;
		while ($i-- && $p < $l)
		{
			$c = $string[$p];
			if ($c < "\xC0") $p++;
			elseif ($c < "\xE0") $p += 2;
			elseif ($c < "\xF0") $p += 3;
			elseif ($c < "\xF8") $p += 4;
			elseif ($c < "\xFC") $p += 5;
			else  $p += 6;
		}
		$t = substr($string, $s, $p - $s);
	}

	$dot && ($p < $l) && $t .= "...";
	return $t;
}

/**
 * 以gbk格式截取的字符串编码
 *
 * @param string $string  要截取的字符串
 * @param int $start      开始截取
 * @param int $length     截取的长度，默认为null，取字符串的全长
 * @param boolean $dot    是否显示省略号，默认为false
 * @return string
 */
function _substr_for_gbk($string, $start, $length = null, $dot = false)
{
	$l = strlen($string);
	$p = $s = 0;
	if (0 !== $start)
	{
		while ($start-- && $p < $l)
		{
			if ($string[$p] > "\x80") $p += 2;
			else  $p++;
		}
		$s = $p;
	}

	if (empty($length))
	{
		$t = substr($string, $s);
	}
	else
	{
		$i = $length;
		while ($i-- && $p < $l)
		{
			if ($string[$p] > "\x80") $p += 2;
			else  $p++;
		}
		$t = substr($string, $s, $p - $s);
	}

	$dot && ($p < $l) && $t .= "...";
	return $t;
}

/**
 * 以utf-8求取字符串长度
 *
 * @param string $string 要计算的字符串编码
 * @return int
 */
function _strlen_for_utf8($string)
{
	$l = strlen($string);
	$p = $c = 0;
	while ($p < $l)
	{
		$a = $string[$p];
		if ($a < "\xC0") $p++;
		elseif ($a < "\xE0") $p += 2;
		elseif ($a < "\xF0") $p += 3;
		elseif ($a < "\xF8") $p += 4;
		elseif ($a < "\xFC") $p += 5;
		else  $p += 6;
		$c++;
	}
	return $c;
}

/**
 * 以gbk求取字符串长度
 *
 * @param string $string 要计算的字符串编码
 * @return int
 */
function _strlen_for_gbk($string)
{
	$l = strlen($string);
	$p = $c = 0;
	while ($p < $l)
	{
		if ($string[$p] > "\x80") $p += 2;
		else  $p++;
		$c++;
	}
	return $c;
}

/*********************** End:以下内容来自 windframework 框架的 字符串类 ***********************/

/* End of file MY_string_helper.php */
/* Location: ./application/helpers/MY_string_helper.php */
